import axios from 'axios'

// 购物车模块
const cartModule = {
  // 开启子模块命名空间
  namespaced: true,
  // state 写成函数，跟组件中的data一样
  state() {
    return {
      goodsList: []
    }
  },
  mutations: {
    setGoodsList(state, newList){
      state.goodsList = newList
    },
    // goods_state 
    // 设置 指定对象的状态，让它的状态与小选复选框的状态保持一致
    // mutations只能接受两个参数，第三个无效，由于这里需要传多个：
    // 一个下标，一个状态，所以第二个参数为一个对象
    // 对象中可以传入多个参数，obj{index:下标,checked:trtue/false}
    setGoodsItemState(state,obj) {
      state.goodsList[obj.index].goods_state = obj.checked
    },
    setGoodsListState(state,checked) {
      state.goodsList.forEach((obj) => obj.goods_state = checked)
    },
    changeCount(state,obj){
      state.goodsList[obj.index].goods_count = obj.val
    },
    addNum(state,id) {
      state.goodsList[id].goods_count++
    },
    subNum(state,id) {
      state.goodsList[id].goods_count--
    },
    changeCountNum(state,obj) {
      if(obj.num<1) {
        return state.goodsList[obj.index].goods_count = 1
      }
      state.goodsList[obj.index].goods_count = obj.num
    }
  },
  actions: {
    async asyncSetGoodsList(store) {
      // 1 发送ajax请求
      let res = await axios({
        method: 'GET',
        url: 'https://www.escook.cn/api/cart'
      })
      // res就是后台响应数据
      // console.log(res);

      // 2 后台响应数据 commit 到 setGoodsList mutations中
      store.commit('setGoodsList', res.data.list)
    }
  },
  // 计算属性 全局计算属性
  getters: {
    // 总数量
    totalCount(state){
      return state.goodsList.reduce((sum, obj) => {
        if(obj.goods_state) {
          sum += obj.goods_count
        }
        return sum
      },0)
      // return
    },
    // 总价格
    totalPrice(state){
      return state.goodsList.reduce((sum, obj) => {
        if(obj.goods_state) {
          sum += obj.goods_count * obj.goods_price
        }
        return sum
      },0)
      // return
    },
    isAllChecked(state){
      // console.log(1);
      return state.goodsList.every(obj => obj.goods_state)
    },
  },
}

export default cartModule
